home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / dev / gui / BGUI11c.lha / demos / bguidemo.c < prev    next >
C/C++ Source or Header  |  1994-12-26  |  68KB  |  1,214 lines

  1. ;/* Execute me to compile with DICE V3.0
  2. dcc bguidemo.c -proto -mi -ms -mRR -lbgui
  3. quit
  4. */
  5. /*
  6. **         $RCSfile: bguidemo.c,v $
  7. **      Description: A small demonstration.
  8. **        Copyright: (C) Copyright 1994 Jaba Development.
  9. **                   (C) Copyright 1994 Jan van den Baard.
  10. **                   All Rights Reserved.
  11. **
  12. **          $Author: jaba $
  13. **        $Revision: 1.14 $
  14. **            $Date: 1994/12/04 18:12:08 $
  15. **/
  16.  
  17. #include <exec/types.h>
  18. #include <exec/memory.h>
  19. #include <libraries/gadtools.h>
  20. #include <dos/dos.h>
  21. #include <graphics/gfxmacros.h>
  22. #include <workbench/workbench.h>
  23. #include <workbench/startup.h>
  24. #include <libraries/bgui.h>
  25. #include <libraries/bgui_macros.h>
  26.  
  27. #include <clib/alib_protos.h>
  28.  
  29. #include <proto/exec.h>
  30. #include <proto/intuition.h>
  31. #include <proto/dos.h>
  32. #include <proto/bgui.h>
  33. #include <proto/graphics.h>
  34.  
  35. #include <stdio.h>
  36.  
  37. /*
  38. **      Online-Help texts.
  39. **/
  40. UBYTE           *MainHelp               = ISEQ_C "BGUI is a shared library which offers a set of\n"
  41.                                           "BOOPSI classes to allow for easy and flexible GUI creation.\n\n"
  42.                                           "The main window is also an AppWindow. Drop some icons\n"
  43.                                           "on it and see what happens.\n\n"
  44.                                           "All windows also detect the aspect ratio of the screen they are\n"
  45.                                           "located on and adjust frame thickness accoording to this.\n\n"
  46.                                           "All other windows in this demo also have online-help. To access\n"
  47.                                           "this help press the " ISEQ_B "HELP" ISEQ_N " key when the window is active.";
  48.  
  49. UBYTE           *GroupsHelp             = ISEQ_C "The BGUI layout engine is encapsulated in the groupclass.\n"
  50.                                           "The groupclass will layout all of it's members into a specific area.\n"
  51.                                           "You can pass layout specific attributes to all group members\n"
  52.                                           "which allows for flexible and powerful layout capabilities.";
  53.  
  54. UBYTE           *NotifHelp              = ISEQ_C "Notification can be used to let an object keep one or\n"
  55.                                           "more other objects informed about it's status. BGUI offers several\n"
  56.                                           "kinds of notification of which two (conditional and map-list) are\n"
  57.                                           "shown in this demonstration.";
  58.  
  59. UBYTE           *InfoHelp               = ISEQ_C "Not much more can be said about the BGUI infoclass than\n"
  60.                                           "is said in this window. Except maybe that this text is shown in an\n"
  61.                                           "infoclass object as are all body texts from a BGUI requester.";
  62.  
  63. UBYTE           *ImageHelp              = ISEQ_C "This window shows you the built-in images that BGUI has\n"
  64.                                           "to offer. Ofcourse these images are all scalable and it is possible\n"
  65.                                           "to create your own, scalable, imagery with the BGUI vectorclass.";
  66.  
  67. UBYTE           *BackfillHelp           = ISEQ_C "Here you see the built-in backfill patterns BGUI supports.\n"
  68.                                           "These backfill patterns can all be used in groups and frames.\n"
  69.                                           "The frameclass also offers you the possibility to add hooks for\n"
  70.                                           "custom backfills and frame rendering.\n\n"
  71.                                           "The bottom frame shows you a custom backfill hook which renders a\n"
  72.                                           "small mandel instead of using a builtin backfill.";
  73.  
  74. UBYTE           *PagesHelp              = ISEQ_C "The pageclass allows you to setup a set of pages containing\n"
  75.                                           "BGUI gadgets or groups. This will give you the oppertunity to\n"
  76.                                           "have several set's of gadgets in a single window.";
  77.  
  78.  
  79. /*
  80. **      Window objects.
  81. **/
  82. Object          *WA_Main  = NULL, *WA_Groups = NULL, *WA_Notif = NULL;
  83. Object          *WA_Info  = NULL, *WA_Image  = NULL, *WA_BFill = NULL;
  84. Object          *WA_Pages = NULL;
  85.  
  86. /*
  87. **      Gadget objects from the main window.
  88. **/
  89. Object          *BT_Groups,   *BT_Notif,    *BT_Quit;
  90. Object          *BT_Info,     *BT_Images,   *BT_BFill;
  91. Object          *BT_Pages,    *BT_IconDone, *BT_IconQuit;
  92. Object          *LV_IconList, *PG_Pager;
  93.  
  94. /*
  95. **      Menus & gadget ID's.
  96. **/
  97. #define ID_ABOUT                1L
  98. #define ID_QUIT                 2L
  99.  
  100. /*
  101. **      A small menu strip.
  102. **/
  103. struct NewMenu MainMenus[] = {
  104.         Title( "Project" ),
  105.                 Item( "About...", "?", ID_ABOUT ),
  106.                 ItemBar,
  107.                 Item( "Quit",     "Q", ID_QUIT  ),
  108.         End
  109. };
  110.  
  111. /*
  112. **      Put up a simple requester.
  113. **/
  114. ULONG Req( struct Window *win, UBYTE *gadgets, UBYTE *body, ... )
  115. {
  116.         struct bguiRequest      req = { NULL };
  117.  
  118.         req.br_GadgetFormat     = gadgets;
  119.         req.br_TextFormat       = body;
  120.         req.br_Flags            = BREQF_CENTERWINDOW|BREQF_XEN_BUTTONS|BREQF_AUTO_ASPECT;
  121.  
  122.         return( BGUI_RequestA( win, &req, ( ULONG * )( &body + 1 )));
  123. }
  124.  
  125. /*
  126. **      Main window button ID's.
  127. **/
  128. #define ID_MAIN_GROUPS          3L
  129. #define ID_MAIN_NOTIF           4L
  130. #define ID_MAIN_INFO            5L
  131. #define ID_MAIN_IMAGE           6L
  132. #define ID_MAIN_BFILL           7L
  133. #define ID_MAIN_PAGES           8L
  134. #define ID_MAIN_ICON_CONT       9L
  135.  
  136. /*
  137. **      Open main window.
  138. **/
  139. struct Window *OpenMainWindow( ULONG *sigmask, ULONG *appmask )
  140. {
  141.         struct Window           *window = NULL;
  142.  
  143.         WA_Main = WindowObject,
  144.                 WINDOW_Title,           "BGUIDemo - (C) Jaba Development.",
  145.                 WINDOW_ScreenTitle,     "BGUIDemo - (C) Copyright 1993-1994 Jaba Development.",
  146.                 WINDOW_MenuStrip,       MainMenus,
  147.                 WINDOW_SmartRefresh,    TRUE,
  148.                 WINDOW_AppWindow,       TRUE,
  149.                 WINDOW_SizeGadget,      FALSE,
  150.                 WINDOW_HelpText,        MainHelp,
  151.                 WINDOW_AutoAspect,      TRUE,
  152.                 WINDOW_MasterGroup,
  153.                         VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ), GROUP_BackFill, SHINE_RASTER,
  154.                                 StartMember,
  155.                                         PG_Pager = PageObject,
  156.                                                 /*
  157.                                                 **      Main page.
  158.                                                 **/
  159.                                                 PageMember,
  160.                                                         VGroupObject, Spacing( 4 ), GROUP_BackFill, SHINE_RASTER,
  161.                                                                 StartMember,
  162.                                                                         InfoObject,
  163.                                                                                 INFO_TextFormat,        ISEQ_C
  164.                                                                                                         "BGUIDemo\n"
  165.                                                                                                         ISEQ_HIGHLIGHT
  166.                                                                                                         ISEQ_B
  167.                                                                                                         "(C) Copyright 1993-1994 Jaba Development"
  168.                                                                                                         ISEQ_TEXT
  169.                                                                                                         ISEQ_N
  170.                                                                                                         "\n\n"
  171.                                                                                                         "Press the HELP key for more info.",
  172.                                                                                 INFO_FixTextWidth,      TRUE,
  173.                                                                                 INFO_MinLines,          4,
  174.                                                                                 INFO_HorizOffset,       13,
  175.                                                                                 FRM_Type,               FRTYPE_NEXT,
  176.                                                                         EndObject,
  177.                                                                 EndMember,
  178.                                                                 StartMember,
  179.                                                                         HGroupObject, Spacing( 4 ),
  180.                                                                                 StartMember,
  181.                                                                                         VGroupObject, Spacing( 4 ),
  182.                                                                                                 StartMember, BT_Groups = XenKeyButton( "_Groups",       ID_MAIN_GROUPS ), EndMember,
  183.                                                                                                 StartMember, BT_Notif  = XenKeyButton( "_Notification", ID_MAIN_NOTIF  ), EndMember,
  184.                                                                                                 VarSpace( DEFAULT_WEIGHT ),
  185.                                                                                         EndObject,
  186.                                                                                 EndMember,
  187.                                                                                 StartMember,
  188.                                                                                         VGroupObject, Spacing( 4 ),
  189.                                                                                                 StartMember, BT_Images = XenKeyButton( "_Images",       ID_MAIN_IMAGE  ), EndMember,
  190.                                                                                                 StartMember, BT_BFill  = XenKeyButton( "_BackFill",     ID_MAIN_BFILL  ), EndMember,
  191.                                                                                                 StartMember, BT_Quit   = XenKeyButton( "_Quit",         ID_QUIT        ), EndMember,
  192.                                                                                         EndObject,
  193.                                                                                 EndMember,
  194.                                                                                 StartMember,
  195.                                                                                         VGroupObject, Spacing( 4 ),
  196.                                                                                                 StartMember, BT_Pages  = XenKeyButton( "_Pages",        ID_MAIN_PAGES  ), EndMember,
  197.                                                                                                 StartMember, BT_Info   = XenKeyButton( "Info_Class",    ID_MAIN_INFO   ), EndMember,
  198.                                                                                                 VarSpace( DEFAULT_WEIGHT ),
  199.                                                                                         EndObject,
  200.                                                                                 EndMember,
  201.                                                                         EndObject, FixMinHeight,
  202.                                                                 EndMember,
  203.                                                         EndObject,
  204.                                                 /*
  205.                                                 **      Icon-drop list page.
  206.                                                 **/
  207.                                                 PageMember,
  208.                                                         VGroupObject, Spacing( 4 ), GROUP_BackFill, SHINE_RASTER,
  209.                                                                 StartMember,
  210.                                                                         InfoObject,
  211.                                                                                 INFO_TextFormat,        ISEQ_C
  212.                                                                                                         "The following icons where dropped\n"
  213.                                                                                                         "in the window.",
  214.                                                                                 INFO_FixTextWidth,      TRUE,
  215.                                                                                 INFO_MinLines,          2,
  216.                                                                                 INFO_HorizOffset,       13,
  217.                                                                                 FRM_Type,               FRTYPE_BUTTON,
  218.                                                                                 FRM_Recessed,           TRUE,
  219.                                                                         EndObject, FixMinHeight,
  220.                                                                 EndMember,
  221.                                                                 StartMember,
  222.                                                                         LV_IconList = ListviewObject,
  223.                                                                                 LISTV_ReadOnly,         TRUE,
  224.                                                                         EndObject,
  225.                                                                 EndMember,
  226.                                                                 StartMember,
  227.                                                                         HGroupObject,
  228.                                                                                 StartMember, BT_IconDone = XenKeyButton( "_Continue", ID_MAIN_ICON_CONT ), EndMember,
  229.                                                                                 VarSpace( DEFAULT_WEIGHT ),
  230.                                                                                 StartMember, BT_IconQuit = XenKeyButton( "_Quit",     ID_QUIT ), EndMember,
  231.                                                                         EndObject, FixMinHeight,
  232.                                                                 EndMember,
  233.                                                         EndObject,
  234.                                         EndObject,
  235.                                 EndMember,
  236.                         EndObject,
  237.         EndObject;
  238.  
  239.         /*
  240.         **      Object created OK?
  241.         **/
  242.         if ( WA_Main ) {
  243.                 /*
  244.                 **      Add keys to the buttons.
  245.                 **/
  246.                 GadgetKey( WA_Main, BT_Groups,   "g" );
  247.                 GadgetKey( WA_Main, BT_Notif,    "n" );
  248.                 GadgetKey( WA_Main, BT_Info,     "c" );
  249.                 GadgetKey( WA_Main, BT_Images,   "i" );
  250.                 GadgetKey( WA_Main, BT_BFill,    "b" );
  251.                 GadgetKey( WA_Main, BT_Pages,    "p" );
  252.                 GadgetKey( WA_Main, BT_Quit,     "q" );
  253.                 GadgetKey( WA_Main, BT_IconDone, "c" );
  254.                 GadgetKey( WA_Main, BT_IconQuit, "q" );
  255.                 /*
  256.                 **      Open the window.
  257.                 **/
  258.                 if ( window = WindowOpen( WA_Main )) {
  259.                         /*
  260.                         **      Obtain signal masks.
  261.                         **/
  262.                         GetAttr( WINDOW_SigMask, WA_Main, sigmask );
  263.                         GetAttr( WINDOW_AppMask, WA_Main, appmask );
  264.                 }
  265.         }
  266.  
  267.         return( window );
  268. }
  269.  
  270. /*
  271. **      Macros for the group objects. GObj() creates
  272. **      a simple infoclass object with some text in
  273. **      it. TObj() creates a simple groupclass object
  274. **      with a button frame.
  275. **/
  276. #define GObj(t)\
  277.         InfoObject,\
  278.                 INFO_TextFormat,        t,\
  279.                 INFO_FixTextWidth,      TRUE,\
  280.                 INFO_HorizOffset,       4,\
  281.                 INFO_VertOffset,        3,\
  282.                 ButtonFrame,\
  283.                 FRM_Flags,              FRF_RECESSED,\
  284.         EndObject
  285.  
  286. #define TObj\
  287.         HGroupObject, HOffset( 3 ), VOffset( 2 ),\
  288.                 ButtonFrame,\
  289.                 FRM_Flags,              FRF_RECESSED,\
  290.         EndObject
  291.  
  292. /*
  293. **      Open up the groups window.
  294. **/
  295. struct Window *OpenGroupsWindow( ULONG *sigmask )
  296. {
  297.         struct Window                   *window = NULL;
  298.  
  299.         /*
  300.         **      If the object has not been created
  301.         **      already we build it.
  302.         **/
  303.         if ( ! WA_Groups ) {
  304.                 WA_Groups = WindowObject,
  305.                         WINDOW_Title,           "BGUI Groups",
  306.                         WINDOW_RMBTrap,         TRUE,
  307.                         WINDOW_SmartRefresh,    TRUE,
  308.                         WINDOW_HelpText,        GroupsHelp,
  309.                         WINDOW_AutoAspect,      TRUE,
  310.                         WINDOW_MasterGroup,
  311.                                 VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ),
  312.                                         StartMember,
  313.                                                 HGroupObject, Spacing( 4 ),
  314.                                                         StartMember,
  315.                                                                 HGroupObject, NeXTFrame, FrameTitle( "Horizontal" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
  316.                                                                         StartMember, TObj, EndMember,
  317.                                                                         StartMember, TObj, EndMember,
  318.                                                                         StartMember, TObj, EndMember,
  319.                                                                 EndObject,
  320.                                                         EndMember,
  321.                                                         StartMember,
  322.                                                                 VGroupObject, NeXTFrame, FrameTitle( "Vertical" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
  323.                                                                         StartMember, TObj, EndMember,
  324.                                                                         StartMember, TObj, EndMember,
  325.                                                                         StartMember, TObj, EndMember,
  326.                                                                 EndObject,
  327.                                                         EndMember,
  328.                                                         StartMember,
  329.                                                                 VGroupObject, NeXTFrame, FrameTitle( "Grid" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
  330.                                                                         StartMember,
  331.                                                                                 HGroupObject, Spacing( 4 ),
  332.                                                                                         StartMember, TObj, EndMember,
  333.                                                                                         StartMember, TObj, EndMember,
  334.                                                                                         StartMember, TObj, EndMember,
  335.                                                                                 EndObject,
  336.                                                                         EndMember,
  337.                                                                         StartMember,
  338.                                                                                 HGroupObject, Spacing( 4 ),
  339.                                                                                         StartMember, TObj, EndMember,
  340.                                                                                         StartMember, TObj, EndMember,
  341.                                                                                         StartMember, TObj, EndMember,
  342.                                                                                 EndObject,
  343.                                                                         EndMember,
  344.                                                                         StartMember,
  345.                                                                                 HGroupObject, Spacing( 4 ),
  346.                                                                                         StartMember, TObj, EndMember,
  347.                                                                                         StartMember, TObj, EndMember,
  348.                                                                                         StartMember, TObj, EndMember,
  349.                                                                                 EndObject,
  350.                                                                         EndMember,
  351.                                                                 EndObject,
  352.                                                         EndMember,
  353.                                                 EndObject,
  354.                                         EndMember,
  355.                                         StartMember,
  356.                                                 VGroupObject, Spacing( 4 ),
  357.                                                         StartMember, TitleSeperator( "Free, Fixed and Weight sizes." ), EndMember,
  358.                                                         StartMember,
  359.                                                                 HGroupObject, Spacing( 4 ),
  360.                                                                         StartMember, GObj( ISEQ_C "25Kg"  ), Weight( 25  ), EndMember,
  361.                                                                         StartMember, GObj( ISEQ_C "50Kg"  ), Weight( 50  ), EndMember,
  362.                                                                         StartMember, GObj( ISEQ_C "75Kg"  ), Weight( 75  ), EndMember,
  363.                                                                         StartMember, GObj( ISEQ_C "100Kg" ), Weight( 100 ), EndMember,
  364.                                                                 EndObject,
  365.                                                         EndMember,
  366.                                                         StartMember,
  367.                                                                 HGroupObject, Spacing( 4 ),
  368.                                                                         StartMember, GObj( ISEQ_C        "Free"  ), EndMember,
  369.                                                                         StartMember, GObj( ISEQ_C ISEQ_B "Fixed" ), FixMinWidth, EndMember,
  370.                                                                         StartMember, GObj( ISEQ_C        "Free"  ), EndMember,
  371.                                                                         StartMember, GObj( ISEQ_C ISEQ_B "Fixed" ), FixMinWidth, EndMember,
  372.                                                                 EndObject,
  373.                                                         EndMember,
  374.                                                 EndObject, FixMinHeight,
  375.                                         EndMember,
  376.                                 EndObject,
  377.                 EndObject;
  378.         }
  379.  
  380.         /*
  381.         **      Object OK?
  382.         **/
  383.         if ( WA_Groups ) {
  384.                 /*
  385.                 **      Open the window.
  386.                 **/
  387.                 if ( window = WindowOpen( WA_Groups ))
  388.                         /*
  389.                         **      Obtain signal mask.
  390.                         **/
  391.                         GetAttr( WINDOW_SigMask, WA_Groups, sigmask );
  392.         }
  393.  
  394.         return( window );
  395. }
  396.  
  397. /*
  398. **      Cycle gadget labels.
  399. **/
  400. UBYTE   *NotifLabels[] = { "Enabled-->", "Disabled-->", "Still Disabled-->", NULL };
  401.  
  402. /*
  403. **      Notification map-lists.
  404. **/
  405. ULONG   pga2sl[] = { PGA_Top,       SLIDER_Level,  TAG_END };
  406. ULONG   sl2prg[] = { SLIDER_Level,  PROGRESS_Done, TAG_END };
  407. ULONG   prg2in[] = { PROGRESS_Done, INDIC_Level,   TAG_END };
  408.  
  409. /*
  410. **      Open the notification window.
  411. **/
  412. struct Window *OpenNotifWindow( ULONG *sigmask )
  413. {
  414.         struct Window                   *window = NULL;
  415.         Object                          *c, *b, *p1, *p2, *s1, *s2, *p, *i1, *i2;
  416.  
  417.         /*
  418.         **      Not created yet? Create it now!
  419.         **/
  420.         if ( ! WA_Notif ) {
  421.                 WA_Notif = WindowObject,
  422.                         WINDOW_Title,           "BGUI notification",
  423.                         WINDOW_RMBTrap,         TRUE,
  424.                         WINDOW_SmartRefresh,    TRUE,
  425.                         WINDOW_HelpText,        NotifHelp,
  426.                         WINDOW_AutoAspect,      TRUE,
  427.                         WINDOW_MasterGroup,
  428.                                 VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ),
  429.                                         StartMember, TitleSeperator( "Conditional" ), EndMember,
  430.                                         StartMember,
  431.                                                 HGroupObject, Spacing( 4 ),
  432.                                                         StartMember, c = XenCycle( NULL, NotifLabels, 0, 0 ), EndMember,
  433.                                                         StartMember, b = XenButton( "Target", 0 ), EndMember,
  434.                                                 EndObject, FixMinHeight,
  435.                                         EndMember,
  436.                                         StartMember, TitleSeperator( "Map-List" ), EndMember,
  437.                                         StartMember,
  438.                                                 HGroupObject, Spacing( 4 ),
  439.                                                         StartMember,
  440.                                                                 VGroupObject, Spacing( 4 ),
  441.                                                                         StartMember, i1 = IndicatorFormat( 0, 100, 0, IDJ_CENTER, "%ld%%" ), FixMinHeight, EndMember,
  442.                                                                         StartMember, p1 = HorizProgress( NULL, 0, 100, 0 ), EndMember,
  443.                                                                 EndObject,
  444.                                                         EndMember,
  445.                                                         StartMember, s1 = VertSlider(   NULL, 0, 100, 0, 0 ), FixWidth( 16 ), EndMember,
  446.                                                         StartMember, p  = VertScroller( NULL, 0, 101, 1, 0 ), FixWidth( 16 ), EndMember,
  447.                                                         StartMember, s2 = VertSlider(   NULL, 0, 100, 0, 0 ), FixWidth( 16 ), EndMember,
  448.                                                         StartMember,
  449.                                                                 VGroupObject, Spacing( 4 ),
  450.                                                                         StartMember, i2 = IndicatorFormat( 0, 100, 0, IDJ_CENTER, "%ld%%" ), FixMinHeight, EndMember,
  451.                                                                         StartMember, p2 = VertProgress( NULL, 0, 100, 0 ), EndMember,
  452.                                                                 EndObject,
  453.                                                         EndMember,
  454.                                                 EndObject,
  455.                                         EndMember,
  456.                                 EndObject,
  457.                 EndObject;
  458.  
  459.                 if ( WA_Notif ) {
  460.                         /*
  461.                         **      Connect the cycle object with the button.
  462.                         **/
  463.                         AddCondit( c, b, CYC_Active, 0, GA_Disabled, FALSE, GA_Disabled, TRUE );
  464.                         /*
  465.                         **      Connect sliders, prop, progression and indicators.
  466.                         **/
  467.                         AddMap( s1, p1, sl2prg );
  468.                         AddMap( s2, p2, sl2prg );
  469.                         AddMap( p,  s1, pga2sl );
  470.                         AddMap( p,  s2, pga2sl );
  471.                         AddMap( p1, i1, prg2in );
  472.                         AddMap( p2, i2, prg2in );
  473.                 }
  474.         }
  475.  
  476.         /*
  477.         **      Object OK?
  478.         **/
  479.         if ( WA_Notif ) {
  480.                         /*
  481.                         **      Open window.
  482.                         **/
  483.                         if ( window = WindowOpen( WA_Notif ))
  484.                                 /*
  485.                                 **      Obtain signal mask.
  486.                                 **/
  487.                                 GetAttr( WINDOW_SigMask, WA_Notif, sigmask );
  488.         }
  489.  
  490.         return( window );
  491. }
  492.  
  493. /*
  494. **      Open infoclass window.
  495. **/
  496. struct Window *OpenInfoWindow( ULONG *sigmask )
  497. {
  498.         struct Window                   *window = NULL;
  499.         ULONG                            args[2];
  500.  
  501.         /*
  502.         **      Setup arguments for the
  503.         **      infoclass object.
  504.         **/
  505.         args[0] = AvailMem( MEMF_CHIP );
  506.         args[1] = AvailMem( MEMF_FAST );
  507.  
  508.         /*
  509.         **      Not created already?
  510.         **/
  511.         if ( ! WA_Info ) {
  512.                 WA_Info = WindowObject,
  513.                         WINDOW_Title,           "BGUI information class",
  514.                         WINDOW_RMBTrap,         TRUE,
  515.                         WINDOW_SmartRefresh,    TRUE,
  516.                         WINDOW_HelpText,        InfoHelp,
  517.                         WINDOW_AutoAspect,      TRUE,
  518.                         WINDOW_MasterGroup,
  519.                                 VGroupObject, HOffset( 4 ), VOffset( 4 ),
  520.                                         StartMember,
  521.                                                 InfoFixed( NULL,
  522.                                                            ISEQ_C "BGUI offers the InfoClass.\n"
  523.                                                            "This class is a text display class which\n"
  524.                                                            "allows things like:\n\n"
  525.                                                            ISEQ_SHINE     "C"
  526.                                                            ISEQ_SHADOW    "o"
  527.                                                            ISEQ_FILL      "l"
  528.                                                            ISEQ_FILLTEXT  "o"
  529.                                                            ISEQ_HIGHLIGHT "r"
  530.                                                            ISEQ_TEXT      "s\n\n"
  531.                                                            ISEQ_L "Left Aligned...\n"
  532.                                                            ISEQ_R "Right Aligned...\n"
  533.                                                            ISEQ_C "Centered...\n\n"
  534.                                                            ISEQ_B "Bold...\n"   ISEQ_N
  535.                                                            ISEQ_I "Italic...\n" ISEQ_N
  536.                                                            ISEQ_U "Underlined...\n\n"
  537.                                                            ISEQ_B ISEQ_I "And combinations!\n\n"
  538.                                                            ISEQ_N "Free CHIP:" ISEQ_SHINE " %lD" ISEQ_TEXT", Free FAST:" ISEQ_SHINE " %lD\n",
  539.                                                            &args[ 0 ],
  540.                                                            17 ),
  541.                                         EndMember,
  542.                                 EndObject,
  543.                 EndObject;
  544.         }
  545.  
  546.         /*
  547.         **      Object OK?
  548.         **/
  549.         if ( WA_Info ) {
  550.                 /*
  551.                 **      Open window.
  552.                 **/
  553.                 if ( window = WindowOpen( WA_Info ))
  554.                         /*
  555.                         **      Obtain signal mask.
  556.                         **/
  557.                         GetAttr( WINDOW_SigMask, WA_Info, sigmask );
  558.         }
  559.  
  560.         return( window );
  561. }
  562.  
  563. /*
  564. **      Open images window.
  565. **/
  566. struct Window *OpenImageWindow( ULONG *sigmask )
  567. {
  568.         struct Window                   *window = NULL;
  569.  
  570.         /*
  571.         **      Not yet created?
  572.         **/
  573.         if ( ! WA_Image ) {
  574.                 WA_Image = WindowObject,
  575.                         WINDOW_Title,           "BGUI images",
  576.                         WINDOW_RMBTrap,         TRUE,
  577.                         WINDOW_SmartRefresh,    TRUE,
  578.                         WINDOW_HelpText,        ImageHelp,
  579.                         WINDOW_AutoAspect,      TRUE,
  580.                         WINDOW_MasterGroup,
  581.                                 VGroupObject, HOffset( 4 ), VOffset( 4 ),
  582.                                         StartMember,
  583.                                                 HGroupObject, NeXTFrame, FrameTitle( "Fixed size" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
  584.                                                         VarSpace( DEFAULT_WEIGHT ),
  585.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETPATH,     ButtonFrame, EndObject, FixWidth( GETPATH_WIDTH     ), FixHeight( GETPATH_HEIGHT     ), EndMember,
  586.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETFILE,     ButtonFrame, EndObject, FixWidth( GETFILE_WIDTH     ), FixHeight( GETFILE_HEIGHT     ), EndMember,
  587.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_CHECKMARK,   ButtonFrame, EndObject, FixWidth( CHECKMARK_WIDTH   ), FixHeight( CHECKMARK_HEIGHT   ), EndMember,
  588.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_POPUP,       ButtonFrame, EndObject, FixWidth( POPUP_WIDTH       ), FixHeight( POPUP_HEIGHT       ), EndMember,
  589.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_UP,    ButtonFrame, EndObject, FixWidth( ARROW_UP_WIDTH    ), FixHeight( ARROW_UP_HEIGHT    ), EndMember,
  590.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_DOWN,  ButtonFrame, EndObject, FixWidth( ARROW_DOWN_WIDTH  ), FixHeight( ARROW_DOWN_HEIGHT  ), EndMember,
  591.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_LEFT,  ButtonFrame, EndObject, FixWidth( ARROW_LEFT_WIDTH  ), FixHeight( ARROW_LEFT_HEIGHT  ), EndMember,
  592.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_RIGHT, ButtonFrame, EndObject, FixWidth( ARROW_RIGHT_WIDTH ), FixHeight( ARROW_RIGHT_HEIGHT ), EndMember,
  593.                                                         VarSpace( DEFAULT_WEIGHT ),
  594.                                                 EndObject, FixMinHeight,
  595.                                         EndMember,
  596.                                         StartMember,
  597.                                                 HGroupObject, NeXTFrame, FrameTitle( "Free size" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
  598.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETPATH,     ButtonFrame, EndObject, EndMember,
  599.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETFILE,     ButtonFrame, EndObject, EndMember,
  600.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_CHECKMARK,   ButtonFrame, EndObject, EndMember,
  601.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_POPUP,       ButtonFrame, EndObject, EndMember,
  602.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_UP,    ButtonFrame, EndObject, EndMember,
  603.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_DOWN,  ButtonFrame, EndObject, EndMember,
  604.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_LEFT,  ButtonFrame, EndObject, EndMember,
  605.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_RIGHT, ButtonFrame, EndObject, EndMember,
  606.                                                 EndObject,
  607.                                         EndMember,
  608.                                 EndObject,
  609.                 EndObject;
  610.         }
  611.  
  612.         /*
  613.         **      Object OK?
  614.         **/
  615.         if ( WA_Image ) {
  616.                 /*
  617.                 **      Open the window.
  618.                 **/
  619.                 if ( window = WindowOpen( WA_Image ))
  620.                         /*
  621.                         **      Obtain signal mask.
  622.                         **/
  623.                         GetAttr( WINDOW_SigMask, WA_Image, sigmask );
  624.         }
  625.  
  626.         return( window );
  627. }
  628.  
  629. /*
  630. **      The BackFill hook to show custom backfills.
  631. **      Renders a small mandel in the frame area. Not
  632. **      really useful but it shows you what is possible.
  633. **
  634. **      Code nicked from the "IntMandel.e" source of the
  635. **      Amiga E v3.0 distribution.
  636. **/
  637. #ifdef _DCC
  638. __geta4 ULONG BackFillHook( __A0 struct Hook *hook, __A2 Object *imo, __A1 struct FrameDrawMsg *fdm )
  639. #else
  640. __saveds __asm ULONG BackFillHook( register __a0 struct Hook         *hook,
  641.                                    register __a2 Object              *imo,
  642.                                    register __a1 struct FrameDrawMsg *fdm )
  643. #endif
  644. {
  645.         LONG    zr, zi, ar, ai, dr, di, sr, si, st, x, y, i;
  646.         LONG    xsize, ysize, depth;
  647.  
  648.         if ( fdm->fdm_DrawInfo ) {
  649.  
  650.                 depth = fdm->fdm_DrawInfo->dri_Depth;
  651.                 xsize = fdm->fdm_Bounds->MaxX - fdm->fdm_Bounds->MinX + 1;
  652.                 ysize = fdm->fdm_Bounds->MaxY - fdm->fdm_Bounds->MinY + 1;
  653.  
  654.                 sr = 0x400000 / xsize;
  655.                 si = 0x300000 / ysize;
  656.                 st = 0x140000 * -2;
  657.                 zi = 0x180000;
  658.  
  659.                 for ( y = ysize - 1; y >= 0; y-- ) {
  660.                         zi -= si;
  661.                         zr = st;
  662.                         for ( x = 0; x < xsize; x++ ) {
  663.                                 i = 0;
  664.                                 ar = zr;
  665.                                 ai = zi;
  666.                                 do {
  667.                                         dr = ar >> 10;
  668.                                         di = ai >> 10;
  669.                                         ai = dr * 2 * di + zi;
  670.                                         dr *= dr;
  671.                                         di *= di;
  672.                                         ar = dr - di + zr;
  673.                                         i++;
  674.                                 } while (( i <= 25 ) && (( dr + di ) <= 0x400000 ));
  675.                                 SetAPen( fdm->fdm_RPort, i % ( 1 << depth ));
  676.                                 WritePixel( fdm->fdm_RPort, x + fdm->fdm_Bounds->MinX, y + fdm->fdm_Bounds->MinY );
  677.                                 zr += sr;
  678.                         }
  679.                 }
  680.         }
  681.         return( FRC_OK );
  682. }
  683.  
  684. /*
  685. **      The hook structure.
  686. **/
  687. struct Hook BackFill = {
  688.         NULL, NULL, (HOOKFUNC)BackFillHook, NULL, NULL
  689. };
  690.  
  691. /*
  692. **      Open back-fill window.
  693. **/
  694. struct Window *OpenFillWindow( ULONG *sigmask )
  695. {
  696.         struct Window                   *window = NULL;
  697.  
  698.         /*
  699.         **      Not yet created?
  700.         **/
  701.         if ( ! WA_BFill ) {
  702.                 WA_BFill = WindowObject,
  703.                         WINDOW_Title,           "BGUI back fill patterns",
  704.                         WINDOW_RMBTrap,         TRUE,
  705.                         WINDOW_SmartRefresh,    TRUE,
  706.                         WINDOW_HelpText,        BackfillHelp,
  707.                         WINDOW_NoBufferRP,      TRUE,
  708.                         WINDOW_ScaleWidth,      50,
  709.                         WINDOW_ScaleHeight,     50,
  710.                         WINDOW_AutoAspect,      TRUE,
  711.                         WINDOW_MasterGroup,
  712.                                 VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ),
  713.                                         StartMember,
  714.                                                 HGroupObject, Spacing( 4 ),
  715.                                                         StartMember, InfoObject, ButtonFrame, ShineRaster,  EndObject, EndMember,
  716.                                                         StartMember, InfoObject, ButtonFrame, ShadowRaster, EndObject, EndMember,
  717.                                                 EndObject,
  718.                                         EndMember,
  719.                                         StartMember,
  720.                                                 HGroupObject, Spacing( 4 ),
  721.                                                         StartMember, InfoObject, ButtonFrame, ShineShadowRaster, EndObject, EndMember,
  722.                                                         StartMember, InfoObject, ButtonFrame, FillRaster,        EndObject, EndMember,
  723.                                                 EndObject,
  724.                                         EndMember,
  725.                                         StartMember,
  726.                                                 HGroupObject, Spacing( 4 ),
  727.                                                         StartMember, InfoObject, ButtonFrame, ShineFillRaster,  EndObject, EndMember,
  728.                                                         StartMember, InfoObject, ButtonFrame, ShadowFillRaster, EndObject, EndMember,
  729.                                                 EndObject,
  730.                                         EndMember,
  731.                                         StartMember,
  732.                                                 HGroupObject, Spacing( 4 ),
  733.                                                         StartMember, InfoObject, ButtonFrame, ShineBlock,  EndObject, EndMember,
  734.                                                         StartMember, InfoObject, ButtonFrame, ShadowBlock, EndObject, EndMember,
  735.                                                 EndObject,
  736.                                         EndMember,
  737.                                         StartMember, HorizSeperator, EndMember,
  738.                                         StartMember, InfoObject, ButtonFrame, FRM_BackFillHook, &BackFill, EndObject, Weight( 200 ), EndMember,
  739.                                 EndObject,
  740.                 EndObject;
  741.         }
  742.  
  743.         /*
  744.         **      Object OK?
  745.         **/
  746.         if ( WA_BFill ) {
  747.                 /*
  748.                 **      Open window.
  749.                 **/
  750.                 if ( window = WindowOpen( WA_BFill ))
  751.                         /*
  752.                         **      Obtain signal mask.
  753.                         **/
  754.                         GetAttr( WINDOW_SigMask, WA_BFill, sigmask );
  755.         }
  756.  
  757.         return( window );
  758. }
  759.  
  760. /*
  761. **      Cycle and Mx labels.
  762. **/
  763. UBYTE *PageLab[] = { "Buttons", "Strings", "CheckBoxes", "Radio-Buttons", NULL };
  764. UBYTE *MxLab[]   = { "MX #1",   "MX #2",   "MX #3",      "MX #4",         NULL };
  765.  
  766. /*
  767. **      Cycle to Page map-list.
  768. **/
  769. ULONG Cyc2Page[] = { MX_Active, PAGE_Active, TAG_END };
  770.  
  771. /*
  772. **      Create a MX object with a title on top.
  773. **/
  774. #define MxGadget(label,labels)\
  775.         MxObject,\
  776.                 GROUP_Style,            GRSTYLE_VERTICAL,\
  777.                 LAB_Label,              label,\
  778.                 LAB_Place,              PLACE_ABOVE,\
  779.                 LAB_Underscore,         '_',\
  780.                 LAB_Highlight,          TRUE,\
  781.                 MX_Labels,              labels,\
  782.                 MX_LabelPlace,          PLACE_LEFT,\
  783.         EndObject, FixMinSize
  784.  
  785. /*
  786. **      Open pages window.
  787. **/
  788. struct Window *OpenPagesWindow( ULONG *sigmask )
  789. {
  790.         Object                          *c, *p, *m, *s1, *s2, *s3;
  791.         struct Window                   *window = NULL;
  792.  
  793.         /*
  794.         **      Not yet created?
  795.         **/
  796.         if ( ! WA_Pages ) {
  797.                 WA_Pages = WindowObject,
  798.                         WINDOW_Title,           "BGUI pages",
  799.                         WINDOW_RMBTrap,         TRUE,
  800.                         WINDOW_SmartRefresh,    TRUE,
  801.                         WINDOW_HelpText,        PagesHelp,
  802.                         WINDOW_AutoAspect,      TRUE,
  803.                         WINDOW_MasterGroup,
  804.                                 VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ),
  805.                                         StartMember, c = Tabs( NULL, PageLab, 0, 0 ), EndMember,
  806.                                         StartMember,
  807.                                                 p = PageObject,
  808.                                                         /*
  809.                                                         **      Button page.
  810.                                                         **/
  811.                                                         PageMember,
  812.                                                                 VGroupObject, Spacing(4),
  813.                                                                         VarSpace( DEFAULT_WEIGHT ),
  814.                                                                         StartMember, XenButton( "Button #1", 0 ), FixMinHeight, EndMember,
  815.                                                                         StartMember, XenButton( "Button #2", 0 ), FixMinHeight, EndMember,
  816.                                                                         StartMember, XenButton( "Button #3", 0 ), FixMinHeight, EndMember,
  817.                                                                         VarSpace( DEFAULT_WEIGHT ),
  818.                                                                 EndObject,
  819.                                                         /*
  820.                                                         **      String page.
  821.                                                         **/
  822.                                                         PageMember,
  823.                                                                 VGroupObject, Spacing(4),
  824.                                                                         VarSpace( DEFAULT_WEIGHT ),
  825.                                                                         StartMember, s1 = String( "String #1", "", 256, 0 ), FixMinHeight, EndMember,
  826.                                                                         StartMember, s2 = String( "String #2", "", 256, 0 ), FixMinHeight, EndMember,
  827.                                                                         StartMember, s3 = String( "String #3", "", 256, 0 ), FixMinHeight, EndMember,
  828.                                                                         VarSpace( DEFAULT_WEIGHT ),
  829.                                                                 EndObject,
  830.                                                         /*
  831.                                                         **      CheckBox page.
  832.                                                         **/
  833.                                                         PageMember,
  834.                                                                 VGroupObject, Spacing(4),
  835.                                                                         StartMember,
  836.                                                                                 HGroupObject, Spacing( 4 ),
  837.                                                                                         VarSpace( DEFAULT_WEIGHT ),
  838.                                                                                         StartMember,
  839.                                                                                                 VGroupObject, Spacing( 4 ),
  840.                                                                                                         VarSpace( DEFAULT_WEIGHT ),
  841.                                                                                                         StartMember, CheckBox( "CheckBox #1", FALSE, 0 ), EndMember,
  842.                                                                                                         StartMember, CheckBox( "CheckBox #2", FALSE, 0 ), EndMember,
  843.                                                                                                         StartMember, CheckBox( "CheckBox #3", FALSE, 0 ), EndMember,
  844.                                                                                                         VarSpace( DEFAULT_WEIGHT ),
  845.                                                                                                 EndObject, FixMinWidth,
  846.                                                                                         EndMember,
  847.                                                                                         VarSpace( DEFAULT_WEIGHT ),
  848.                                                                                 EndObject,
  849.                                                                         EndMember,
  850.                                                                 EndObject,
  851.                                                         /*
  852.                                                         **      Mx page.
  853.                                                         **/
  854.                                                         PageMember,
  855.                                                                 VGroupObject, Spacing(4),
  856.                                                                         VarSpace( DEFAULT_WEIGHT ),
  857.                                                                         StartMember,
  858.                                                                                 HGroupObject,
  859.                                                                                         VarSpace( DEFAULT_WEIGHT ),
  860.                                                                                         StartMember, m = MxGadget( "_Mx Object", MxLab ), EndMember,
  861.                                                                                         VarSpace( DEFAULT_WEIGHT ),
  862.                                                                                 EndObject, FixMinHeight,
  863.                                                                         EndMember,
  864.                                                                         VarSpace( DEFAULT_WEIGHT ),
  865.                                                                 EndObject,
  866.                                                 EndObject,
  867.                                         EndMember,
  868.                                 EndObject,
  869.                 EndObject;
  870.  
  871.                 /*
  872.                 **      Object OK?
  873.                 **/
  874.                 if ( WA_Pages ) {
  875.                         /*
  876.                         **      Add key for the MX object.
  877.                         **/
  878.                         GadgetKey( WA_Pages, m, "m" );
  879.                         /*
  880.                         **      Connect the cycle to the page.
  881.                         **/
  882.                         AddMap( c, p, Cyc2Page );
  883.                         /*
  884.                         **      Set tab-cycling order.
  885.                         **/
  886.                         DoMethod( WA_Pages, WM_TABCYCLE_ORDER, s1, s2, s3, NULL );
  887.                 }
  888.         }
  889.  
  890.         /*
  891.         **      Object OK?
  892.         **/
  893.         if ( WA_Pages ) {
  894.                 /*
  895.                 **      Open the window.
  896.                 **/
  897.                 if ( window = WindowOpen( WA_Pages ))
  898.                         /*
  899.                         **      Obtain signal mask.
  900.                         **/
  901.                         GetAttr( WINDOW_SigMask, WA_Pages, sigmask );
  902.         }
  903.  
  904.         return( window );
  905. }
  906.  
  907. /*
  908. **      Main entry.
  909. **/
  910. void main( int argc, char *argv[] )
  911. {
  912.         struct Window          *main = NULL, *groups = NULL, *notif = NULL, *info = NULL, *image = NULL, *bfill = NULL, *pages = NULL;
  913.         struct AppMessage      *apm;
  914.         struct WBArg           *ap;
  915.         ULONG                   mainsig = 0L, groupssig = 0L, notifsig = 0L, infosig = 0L, imagesig = 0L, bfillsig = 0L, pagessig = 0L, appsig = 0L;
  916.         ULONG                   sigmask = 0L, sigrec, rc, i;
  917.         BOOL                    running = TRUE;
  918.         UBYTE                   name[ 256 ];
  919.  
  920.         /*
  921.         **      Open the main window.
  922.         **/
  923.         if ( main = OpenMainWindow( &mainsig, &appsig )) {
  924.                 /*
  925.                 **      OR signal masks.
  926.                 **/
  927.                 sigmask |= mainsig | appsig;
  928.                 /*
  929.                 **      Loop...
  930.                 **/
  931.                 do {
  932.                         /*
  933.                         **      Wait for the signals to come.
  934.                         **/
  935.                         sigrec = Wait( sigmask );
  936.                         /*
  937.                         **      AppWindow signal?
  938.                         **/
  939.                         if ( sigrec & appsig ) {
  940.                                 /*
  941.                                 **      Obtain AppWindow messages.
  942.                                 **/
  943.                                 while ( apm = GetAppMsg( WA_Main )) {
  944.                                         /*
  945.                                         **      Get all dropped icons.
  946.                                         **/
  947.                                         for ( ap = apm->am_ArgList, i = 0; i < apm->am_NumArgs; i++, ap++ ) {
  948.                                                 /*
  949.                                                 **      Build fully qualified name.
  950.                                                 **/
  951.                                                 NameFromLock( ap->wa_Lock, name, 256 );
  952.                                                 AddPart( name, ap->wa_Name, 256 );
  953.                                                 /*
  954.                                                 **      Add it to the listview.
  955.                                                 **/
  956.                                                 AddEntry( main, LV_IconList, (APTR)name, LVAP_SORTED );
  957.                                         }
  958.                                         /*
  959.                                         **      Important! We must reply the message!
  960.                                         **/
  961.                                         ReplyMsg(( struct Message * )apm );
  962.                                 }
  963.                                 /*
  964.                                 **      Switch to the Icon page.
  965.                                 **/
  966.                                 SetGadgetAttrs(( struct Gadget * )PG_Pager, main, NULL, PAGE_Active, 1, TAG_END );
  967.                         }
  968.  
  969.                         /*
  970.                         **      Main window signal?
  971.                         **/
  972.                         if ( sigrec & mainsig ) {
  973.                                 /*
  974.                                 **      Call the main-window event handler.
  975.                                 **/
  976.                                 while (( rc = HandleEvent( WA_Main )) != WMHI_NOMORE ) {
  977.                                         switch ( rc ) {
  978.  
  979.                                                 case    WMHI_CLOSEWINDOW:
  980.                                                 case    ID_QUIT:
  981.                                                         running = FALSE;
  982.                                                         break;
  983.  
  984.                                                 case    ID_ABOUT:
  985.                                                         Req( main, "OK", "\33c\33b\33d8BGUIDemo\33n\33d2\n(C) Copyright 1993-1994 Jaba Development" );
  986.                                                         break;
  987.  
  988.                                                 case    ID_MAIN_GROUPS:
  989.                                                         /*
  990.                                                         **      Open groups window.
  991.                                                         **/
  992.                                                         if ( ! groups ) {
  993.                                                                 if ( groups = OpenGroupsWindow( &groupssig ))
  994.                                                                         sigmask |= groupssig;
  995.                                                         }
  996.                                                         break;
  997.  
  998.                                                 case    ID_MAIN_NOTIF:
  999.                                                         /*
  1000.                                                         **      Open notification window.
  1001.                                                         **/
  1002.                                                         if ( ! notif ) {
  1003.                                                                 if ( notif = OpenNotifWindow( ¬ifsig ))
  1004.                                                                         sigmask |= notifsig;
  1005.                                                         }
  1006.                                                         break;
  1007.  
  1008.                                                 case    ID_MAIN_INFO:
  1009.                                                         /*
  1010.                                                         **      Open infoclass window.
  1011.                                                         **/
  1012.                                                         if ( ! info ) {
  1013.                                                                 if ( info = OpenInfoWindow( &infosig ))
  1014.                                                                         sigmask |= infosig;
  1015.                                                         }
  1016.                                                         break;
  1017.  
  1018.                                                 case    ID_MAIN_IMAGE:
  1019.                                                         /*
  1020.                                                         **      Open images window.
  1021.                                                         **/
  1022.                                                         if ( ! image ) {
  1023.                                                                 if ( image = OpenImageWindow( &imagesig ))
  1024.                                                                         sigmask |= imagesig;
  1025.                                                         }
  1026.                                                         break;
  1027.  
  1028.                                                 case    ID_MAIN_BFILL:
  1029.                                                         /*
  1030.                                                         **      Open backfill window.
  1031.                                                         **/
  1032.                                                         if ( ! bfill ) {
  1033.                                                                 if ( bfill = OpenFillWindow( &bfillsig ))
  1034.                                                                         sigmask |= bfillsig;
  1035.                                                         }
  1036.                                                         break;
  1037.  
  1038.                                                 case    ID_MAIN_PAGES:
  1039.                                                         /*
  1040.                                                         **      Open pages window.
  1041.                                                         **/
  1042.                                                         if ( ! pages ) {
  1043.                                                                 if ( pages = OpenPagesWindow( &pagessig ))
  1044.                                                                         sigmask |= pagessig;
  1045.                                                         }
  1046.                                                         break;
  1047.  
  1048.                                                 case    ID_MAIN_ICON_CONT:
  1049.                                                         /*
  1050.                                                         **      Switch back to the main page.
  1051.                                                         **/
  1052.                                                         SetGadgetAttrs(( struct Gadget * )PG_Pager, main, NULL, PAGE_Active, 0, TAG_END );
  1053.                                                         /*
  1054.                                                         **      Clear all entries from the listview.
  1055.                                                         **/
  1056.                                                         ClearList( main, LV_IconList );
  1057.                                                         break;
  1058.                                         }
  1059.                                 }
  1060.                         }
  1061.  
  1062.                         /*
  1063.                         **      The code below will close the
  1064.                         **      specific window.
  1065.                         **/
  1066.                         if ( sigrec & groupssig ) {
  1067.                                 while (( rc = HandleEvent( WA_Groups )) != WMHI_NOMORE ) {
  1068.                                         switch ( rc ) {
  1069.                                                 case    WMHI_CLOSEWINDOW:
  1070.                                                         WindowClose( WA_Groups );
  1071.                                                         sigmask &= ~groupssig;
  1072.                                                         groupssig = 0L;
  1073.                                                         groups = NULL;
  1074.                                                         break;
  1075.                                         }
  1076.                                 }
  1077.                         }
  1078.  
  1079.                         if ( sigrec & notifsig ) {
  1080.                                 while (( rc = HandleEvent( WA_Notif )) != WMHI_NOMORE ) {
  1081.                                         switch ( rc ) {
  1082.                                                 case    WMHI_CLOSEWINDOW:
  1083.                                                         WindowClose( WA_Notif );
  1084.                                                         sigmask &= ~notifsig;
  1085.                                                         notifsig = 0L;
  1086.                                                         notif = NULL;
  1087.                                                         break;
  1088.                                         }
  1089.                                 }
  1090.                         }
  1091.  
  1092.                         if ( sigrec & infosig ) {
  1093.                                 while (( rc = HandleEvent( WA_Info )) != WMHI_NOMORE ) {
  1094.                                         switch ( rc ) {
  1095.                                                 case    WMHI_CLOSEWINDOW:
  1096.                                                         WindowClose( WA_Info );
  1097.                                                         sigmask &= ~infosig;
  1098.                                                         infosig = 0L;
  1099.                                                         info = NULL;
  1100.                                                         break;
  1101.                                         }
  1102.                                 }
  1103.                         }
  1104.  
  1105.                         if ( sigrec & imagesig ) {
  1106.                                 while (( rc = HandleEvent( WA_Image )) != WMHI_NOMORE ) {
  1107.                                         switch ( rc ) {
  1108.                                                 case    WMHI_CLOSEWINDOW:
  1109.                                                         WindowClose( WA_Image );
  1110.                                                         sigmask &= ~imagesig;
  1111.                                                         imagesig = 0L;
  1112.                                                         image = NULL;
  1113.                                                         break;
  1114.                                         }
  1115.                                 }
  1116.                         }
  1117.  
  1118.                         if ( sigrec & bfillsig ) {
  1119.                                 while (( rc = HandleEvent( WA_BFill )) != WMHI_NOMORE ) {
  1120.                                         switch ( rc ) {
  1121.                                                 case    WMHI_CLOSEWINDOW:
  1122.                                                         WindowClose( WA_BFill );
  1123.                                                         sigmask &= ~bfillsig;
  1124.                                                         bfillsig = 0L;
  1125.                                                         bfill = NULL;
  1126.                                                         break;
  1127.                                         }
  1128.                                 }
  1129.                         }
  1130.  
  1131.                         if ( sigrec & pagessig ) {
  1132.                                 while (( rc = HandleEvent( WA_Pages )) != WMHI_NOMORE ) {
  1133.                                         switch ( rc ) {
  1134.                                                 case    WMHI_CLOSEWINDOW:
  1135.                                                         WindowClose( WA_Pages );
  1136.                                                         sigmask &= ~pagessig;
  1137.                                                         pagessig = 0L;
  1138.                                                         pages = NULL;
  1139.                                                         break;
  1140.                                         }
  1141.                                 }
  1142.                         }
  1143.                 } while ( running );
  1144.         }
  1145.         /*
  1146.         **      Dispose of all window objects.
  1147.         **/
  1148.         if ( WA_Pages )         DisposeObject( WA_Pages );
  1149.         if ( WA_BFill )         DisposeObject( WA_BFill );
  1150.         if ( WA_Image )         DisposeObject( WA_Image );
  1151.         if ( WA_Info )          DisposeObject( WA_Info );
  1152.         if ( WA_Notif )         DisposeObject( WA_Notif );
  1153.         if ( WA_Groups )        DisposeObject( WA_Groups );
  1154.         if ( WA_Main )          DisposeObject( WA_Main );
  1155. }
  1156.  
  1157. /*
  1158. **      DICE stuff.
  1159. **/
  1160. #ifdef _DCC
  1161. int wbmain( struct WBStartup *wbs )
  1162. {
  1163.         return( main( 0, NULL ));
  1164. }
  1165. #endif
  1166.  
  1167. /*
  1168.  *      $Log: bguidemo.c,v $
  1169.  * Revision 1.14  1994/12/04  18:12:08  jaba
  1170.  * Added a tabs-mode mx object in the pages window.
  1171.  *
  1172.  * Revision 1.13  1994/10/23  15:03:57  jaba
  1173.  * Added some more examples.
  1174.  *
  1175.  * Revision 1.12  1994/10/02  14:57:30  jaba
  1176.  * Added online-help to all windows.
  1177.  *
  1178.  * Revision 1.11  1994/09/29  20:14:37  jaba
  1179.  * Cleaned it up a little.
  1180.  *
  1181.  * Revision 1.10  1994/09/29  18:35:54  jaba
  1182.  * Enhanced the icon-drop thinggy.
  1183.  *
  1184.  * Revision 1.9  1994/08/03  11:16:20  jaba
  1185.  * Switch to proto/ instead of clib/.
  1186.  *
  1187.  * Revision 1.8  1994/07/25  20:08:47  jaba
  1188.  * Added some group seperators.
  1189.  *
  1190.  * Revision 1.7  1994/07/19  19:52:25  jaba
  1191.  * Fixed a positioning bug in the pages window.
  1192.  *
  1193.  * Revision 1.6  1994/07/18  17:44:16  jaba
  1194.  * Removed the sizing gadget from the main window.
  1195.  *
  1196.  * Revision 1.5  1994/07/16  18:21:04  jaba
  1197.  * Added the BREQF_XEN_BUTTONS flag to the BGUI_RequestA() routine.
  1198.  *
  1199.  * Revision 1.4  1994/07/16  18:04:39  jaba
  1200.  * Added a backfill pattern in the main-window.
  1201.  *
  1202.  * Revision 1.3  1994/07/16  13:16:37  jaba
  1203.  * Added a Free chip&fast display to the InfoClass window
  1204.  * to show the possibility of C-style formatting codes in
  1205.  * an InfoClass object.
  1206.  *
  1207.  * Revision 1.2  1994/07/16  12:17:38  jaba
  1208.  * Added some more XEN stuff.
  1209.  *
  1210.  * Revision 1.1  1994/07/16  11:09:12  jaba
  1211.  * Initial revision
  1212.  *
  1213.  */
  1214.